#include "file_handler.h"
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QDebug>

FileHandler::FileHandler(QObject *parent) : QObject(parent)
{
}

void FileHandler::openFile(QWidget *parent)
{
    QString filePath = QFileDialog::getOpenFileName(
        parent,
        "打开数据文件",
        "",
        getFileFilter()
        );

    if (filePath.isEmpty()) {
        return;
    }

    QString content = readFileContent(filePath);
    if (!content.isEmpty()) {
        emit fileLoaded(content, filePath);
    }
}

void FileHandler::saveFile(const QString &filePath, const QString &content)
{
    if (writeFileContent(filePath, content)) {
        emit fileLoaded(content, filePath); // 刷新状态
    }
}

void FileHandler::saveAsFile(QWidget *parent, const QString &content)
{
    QString filePath = QFileDialog::getSaveFileName(
        parent,
        "另存为",
        "",
        getFileFilter()
        );

    if (!filePath.isEmpty()) {
        saveFile(filePath, content);
    }
}

QString FileHandler::readFileContent(const QString &filePath)
{
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        emit errorOccurred("无法打开文件: " + filePath);
        return QString();
    }

    QTextStream in(&file);

    // Qt6 使用 UTF-8 作为默认编码，不需要额外设置
    QString content = in.readAll();
    file.close();

    if (content.isEmpty()) {
        emit errorOccurred("文件内容为空: " + filePath);
    }

    return content;
}

bool FileHandler::writeFileContent(const QString &filePath, const QString &content)
{
    QFile file(filePath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        emit errorOccurred("无法保存文件: " + filePath);
        return false;
    }

    QTextStream out(&file);
    // Qt6 使用 UTF-8 作为默认编码
    out << content;
    file.close();

    return true;
}

QString FileHandler::getFileFilter() const
{
    return "文本文件 (*.txt);;数据文件 (*.dat);;日志文件 (*.log);;所有文件 (*.*)";
}
